home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1999 March / EnigmA AMIGA RUN 35 (1999)(G.R. Edizioni)(IT)[!][issue 1999-03].iso / earcd / devel / vbcc-68k-src / machines / amiga68k / libsrc / stdlib / bsearch.c < prev    next >
C/C++ Source or Header  |  1999-01-01  |  551b  |  28 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. /* sample compar function: int cmp(void *a,void *b){ return *(int *)a-*(int *)b; } */
  5.  
  6. void *bsearch
  7. (const void *key,const void *base,size_t nmemb,size_t size,
  8.  int (*compar)(const void *,const void *))
  9. { char *base2=(char *)base;
  10.   size_t a=0;
  11.   size_t b=nmemb;
  12.   size_t c;
  13.   int d;
  14.   if(nmemb!=0)
  15.     for(;;)
  16.     { c=(a+b)/2;
  17.       if((d=(*compar)(key,&base2[size*c]))==0)
  18.         return &base2[size*c];
  19.       if(c==a)
  20.         break;
  21.       if(d<0)
  22.         b=c;
  23.       else
  24.         a=c;
  25.     }
  26.   return NULL;
  27. }
  28.